package com.iakuil.app.common.core.util;

import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.convert.Convert;
import com.iakuil.app.common.core.constant.SysConstant;
import lombok.experimental.UtilityClass;
import org.springframework.lang.Nullable;

/**
 * 安全工具类
 *
 * @author Kai
 */
@UtilityClass
public class SecurityUtils {

    /**
     * 获取当前登录用户的ID，不存在则返回默认值
     *
     * @return UID
     */
    public Long getCurrentUserId() {
        return getCurrentUserId(false);
    }

    /**
     * 获取当前登录用户的ID
     *
     * @param throwExIfAbsent 如果当前用户未登录，是否抛出异常
     * @return UID
     */
    public Long getCurrentUserId(boolean throwExIfAbsent) {
        return throwExIfAbsent ? StpUtil.getLoginIdAsLong() : StpUtil.getLoginId(SysConstant.SYS_USER_ID);
    }


    /**
     * 通过token获取当前登录用户的ID，未登录返回null
     *
     * @param token app-token
     * @return UID
     */
    @Nullable
    public Long getUserIdByToken(String token) {
        return Convert.toLong(StpUtil.getLoginIdByToken(token));
    }

    /**
     * 当前用户是否管理员
     *
     * @return 是否管理员
     */
    public static boolean isAdmin() {
        return true;
    }
}
